﻿function Bonus(bonusType) {
    // losowanie miejsca gdzie pojawi sie bonus
    this.getRandomPlaceOnBoard = function (maxSize) {
        return Math.floor((Math.random() * maxSize));
    };

    // parametry
    this.radius = 25; // promien
    this.x = this.getRandomPlaceOnBoard(gameWidth-2*this.radius);
    this.y = this.getRandomPlaceOnBoard(gameHeight-2*this.radius);
    this.bonusType = bonusType;
    this.taken = false; // czy ktos juz wzial bonus

    // narysowanie bonusu
    this.draw = function () {
        ctxBonus.drawImage(this.bonusType.image, this.x, this.y);
    }
}

// lista wszystkich bonusow
var BonusArray = new Array();

// dodawanie bonusow do ekranu co okreslony odstep czasu w GameLogic
function GenerateBonus() {
    if (!displayingWinner) {
        var bonusNumber = Math.floor((Math.random() * BonusTypes.length)); // losuje numer bonusa pomiedzy 0 a iloscia bonusow
        BonusArray.push(new Bonus(BonusTypes[bonusNumber]));
        console.log('generated: ', BonusTypes[bonusNumber].name.text);
    }
}

function ResetBonuses() {
    BonusArray.length = 0; // czyszczenei tablicy bonusow
}

// rysowanie bonusów
function DrawBonuses() {
    ctxBonus.clearRect(0, 0, gameHeight, gameWidth);
    for (var i = 0; i < BonusArray.length; i++) {
        BonusArray[i].draw();
    }
}

// sprawdza czy waz(snake) zabral bonus
function checkIfBonusTaken(snake) {
    for (var i = 0; i < BonusArray.length; i++) {
        var bonus = BonusArray[i];
        if (IsInCircle(snake.x, snake.y, bonus.x + bonus.radius, bonus.y + bonus.radius, bonus.radius)) {
            // bonus dla mnie
            if (bonus.bonusType.destiny == BonusDestiny.ME) {
                // jezeli bonus zmienia jakis parametr wezyka
                if (bonus.bonusType.changeSnakeParameter) {
                    ChangeSnakeParameter(snake, bonus.bonusType);
                }
                BonusArray.splice(BonusArray.indexOf(bonus), 1); // usuniecie elementu z tablicy
            }
            // bonus dla przeciwnikow
            else if (bonus.bonusType.destiny == BonusDestiny.THEY) {
                if (bonus.bonusType.changeSnakeParameter) {
                    for (var j = 0; j < snakesNumber; j++) {
                        if (snakes[j].number != snake.number) {
                            ChangeSnakeParameter(snakes[j], bonus.bonusType);
                        }
                    }
                }
                BonusArray.splice(BonusArray.indexOf(bonus), 1);
            }
            //bonus dla wszystkich
            else if (bonus.bonusType.destiny == BonusDestiny.ALL) {
                if (bonus.bonusType.changeSnakeParameter) {
                    for (var j = 0; j < snakesNumber; j++) {
                        ChangeSnakeParameter(snakes[j], bonus.bonusType);
                    }
                }
                else
                    ExecuteBonus(bonus.bonusType);
                BonusArray.splice(BonusArray.indexOf(bonus), 1);
            }
        }
    }
}
